﻿Imports AccesoDatos

Public Class MultiUsuario
#Region "Roberto"
    ''' <summary>
    ''' Modifica el puesto de un empleado determinado.
    ''' </summary>
    ''' <param name="p_codigo">Codigo.</param>
    ''' <param name="p_puesto">Codigo Puesto.</param>
    ''' <remarks>Creado Por: Roberto Fiatt, Fecha: 22/06/2010</remarks>
    Public Shared Sub modificarPuestoEmpleado(ByVal p_codigo As String, ByVal p_puesto As Integer)
        Dim pars(1) As AccesoDatos.Parametro
        Dim sql As String

        sql = "UPDATE t_usuario SET puesto = p_puesto WHERE identificacion = p_codigo"

        pars(0) = New AccesoDatos.Parametro("p_codigo", p_codigo)
        pars(1) = New AccesoDatos.Parametro("p_puesto", p_puesto)

        g_access.ejecutarSQL(sql, pars)
    End Sub

    ''' <summary>
    ''' Actualiza el historial de puesto de un empleado.
    ''' </summary>
    ''' <param name="p_codigoEmpleado">Codigo del Empleado</param>
    ''' <param name="p_codigoPuesto">Codigo de Puesto</param>
    ''' <remarks>Creado Por: Roberto Fiatt, Fecha:20/07/2010, Modificado:20/07/2010</remarks>
    Public Shared Sub actualizarHistorial(ByVal p_codigoEmpleado As String, ByVal p_codigoPuesto As Integer)
        Dim pars(2) As AccesoDatos.Parametro
        Dim sql As String
        Dim fechaInicio As Date

        fechaInicio = Date.Now()
        sql = "INSERT INTO t_historial VALUES (codigo_empleado, puesto, fecha_inicio)"

        pars(0) = New AccesoDatos.Parametro("codigo_empleado", p_codigoEmpleado)
        pars(1) = New AccesoDatos.Parametro("puesto", p_codigoPuesto)
        pars(2) = New AccesoDatos.Parametro("fecha_inicio", fechaInicio)

        g_access.ejecutarSQL(sql, pars)
    End Sub

#End Region

#Region "Elías Baldioceda"

    ''' <summary>
    ''' Busca un usuario.
    ''' </summary>
    ''' <param name="p_identificacion">Número de identificación.</param>
    ''' <returns>Un usuario.</returns>
    ''' <remarks>Creado por: Elías Baldioceda, Fecha: 20/06/2010, Modificado: 20/06/2010</remarks>
    Public Shared Function buscar(ByVal p_identificacion As String) As Usuario
        Dim sql As String
        Dim pars(0) As Parametro
        Dim data As IDataReader
        Dim usuario As Usuario = Nothing

        sql = "SELECT * FROM t_usuario WHERE identificacion=p_identificacion AND eliminado=0"
        pars(0) = New Parametro("p_identificacion", p_identificacion)

        data = g_access.ejecutarQuery(sql, pars)

        While data.Read()
            usuario = cargarUsuario(data)
        End While

        Return usuario
    End Function


    ''' <summary>
    ''' Verifica si el usuario tiene el permiso indicado.
    ''' </summary>
    ''' <param name="p_identificacion">Número de identificación.</param>
    ''' <param name="p_permiso">Código del permiso.</param>
    ''' <returns>Si el usuario tiene el permiso.</returns>
    ''' <remarks>Creado por: Elías Baldioceda, Fecha: 27/04/2010, Modificado: 27/04/2010</remarks>
    Public Shared Function tienePermiso(ByVal p_identificacion As String, ByVal p_permiso As Integer) As Boolean
        Dim cnx As IDbConnection
        Dim data As IDataReader
        Dim sql As String
        Dim pars(1) As Parametro
        Dim tiene As Boolean = False

        sql = "SELECT COUNT(*) AS tiene FROM t_permiso AS p " & _
            "INNER JOIN t_permiso_rol AS pr ON pr.id_permiso=p.id " & _
            "INNER JOIN t_rol AS r ON r.id=pr.id_rol INNER JOIN t_usuario AS u ON u.rol=r.id " & _
            "WHERE u.identificacion=p_identificacion AND p.id=p_permiso AND u.eliminado=0"
        cnx = g_access.getConnection

        pars(0) = New Parametro("p_identificacion", p_identificacion)
        pars(1) = New Parametro("p_permiso", p_permiso)

        data = g_access.ejecutarQuery(sql, pars)

        If data.Read Then
            If data.Item("tiene") > 0 Then
                tiene = True
            End If
        End If

        cnx.Close()
        Return tiene
    End Function

    ''' <summary>
    ''' Carga los datos obtenidos de la base de datos en un usuario.
    ''' </summary>
    ''' <param name="p_dr">Datos obtenidos de la base de datos.</param>
    ''' <returns>Un usuario.</returns>
    ''' <remarks>Creado por: Elías Baldioceda, Fecha: 19/06/2010, Modificado: 19/06/2010</remarks>
    Private Shared Function cargarUsuario(ByVal p_dr As IDataReader) As Usuario
        Dim usuario As New Usuario

        ' Define los atributos del usuario.
        usuario.nombre = p_dr.Item("nombre")
        usuario.primerApellido = p_dr.Item("primer_apellido")
        usuario.segundoApellido = p_dr.Item("segundo_apellido")
        usuario.tipoIdentificacion = p_dr.Item("tipo_identificacion")
        usuario.identificacion = p_dr.Item("identificacion")
        usuario.fechaNacimiento = p_dr.Item("fecha_nacimiento")
        usuario.telefono = p_dr.Item("telefono")
        usuario.correo = p_dr.Item("correo_electronico")
        usuario.nombreUsuario = p_dr.Item("nombre_usuario")
        usuario.contrasenna = p_dr.Item("contrasenna")
        usuario.fechaIngreso = p_dr.Item("fecha_ingreso")
        usuario.estado = p_dr.Item("estado")
        usuario.vacaciones = p_dr.Item("vacaciones")
        usuario.estadoCurriculo = p_dr.Item("estado_curriculo")
        usuario.rol = p_dr.Item("rol")

        ' Pasa el género a String.
        If p_dr.Item("genero") Then
            usuario.genero = "Femenino"
        Else
            usuario.genero = "Masculino"
        End If

        ' En caso de tener un puesto asignarlo al usuario.
        If Not TypeOf p_dr.Item("puesto") Is DBNull Then
            usuario.puesto = MultiPuesto.obtener(p_dr.Item("puesto"))
        End If

        Return usuario
    End Function
#End Region
End Class
